package com.steven.design.XingWei_Pattern.FangWenZhe;


import com.steven.design.XingWei_Pattern.FangWenZhe.WeiPai.IVisitorBack;
import com.steven.design.XingWei_Pattern.FangWenZhe.WeiPai.Kaven;

/**
 * 可以看到，Customer 对每一种食物做出了自己的选择，这就是一个最简单的访问者模式，它已经体现出了访问者模式的核心思想：将数据的结构和对数据的操作分离
 * 访问者模式（Visitor Pattern）：表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
 *
 * 本例中，顾客需要选择餐厅的食物，由于每个顾客对食物的选择是不一样的，如果在餐厅类中处理每位顾客的需求，
 * 必然导致餐厅类职责过多。所以我们并没有在餐厅类中处理顾客的需求，而是将所有的食物通过接口暴露出去，
 * 欢迎每位顾客来访问。顾客只要实现访问者接口就能访问到所有的食物，然后在接口方法中做出自己的选择。
 */
public class Client {
    public static void main(String[] args) {
        Restaurant restaurant = new Restaurant();
//        IVisitor Aurora = new Customer();
//        restaurant.welcome(Aurora);

        IVisitorBack Kevin = new Kaven();
        restaurant.welcomeBack(Kevin);

    }
}
